iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
佛心分享-SideProject30

從0開始—初階程式語言學習者的必經之路系列 第 23

DAY23⬅️⬆️➡️⬇️機器人的路徑規劃

  • 分享至 

  • xImage
  •  

有時候設計遊戲時也會用到上下左右鍵,其實機器人🤖的路徑也類似這種方式喔!可使用setDirectionTowards

要在 Java 程式中加入簡單的路徑規劃,可以實現一個基本的路徑導航系統,讓機器人從起始位置到達目標位置。這裡會演示如何讓機器人根據給定的目標點進行路徑規劃,並逐步移動到目標。

假設機器人可以在一個 2D 平面上自由移動,每次移動只能向前一步,路徑規劃的邏輯將基於機器人當前的位置和目標位置的差異來決定移動方向。

程式碼示例:

class Robot {
    private int x, y;
    private String direction;

    public Robot(int x, int y, String direction) {
        this.x = x;
        this.y = y;
        this.direction = direction;
    }

    public void moveForward() {
        switch (direction) {
            case "N":
                y++;
                break;
            case "S":
                y--;
                break;
            case "E":
                x++;
                break;
            case "W":
                x--;
                break;
        }
        System.out.println("Moved forward to: (" + x + ", " + y + ")");
    }

    public void turnLeft() {
        switch (direction) {
            case "N":
                direction = "W";
                break;
            case "S":
                direction = "E";
                break;
            case "E":
                direction = "N";
                break;
            case "W":
                direction = "S";
                break;
        }
        System.out.println("Turned left. Now facing: " + direction);
    }

    public void turnRight() {
        switch (direction) {
            case "N":
                direction = "E";
                break;
            case "S":
                direction = "W";
                break;
            case "E":
                direction = "S";
                break;
            case "W":
                direction = "N";
                break;
        }
        System.out.println("Turned right. Now facing: " + direction);
    }

    public String getPosition() {
        return "(" + x + ", " + y + ") facing " + direction;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    public String getDirection() {
        return direction;
    }

    // 設定方向朝向目標點
    private void setDirectionTowards(int targetX, int targetY) {
        if (x < targetX) {
            direction = "E";
        } else if (x > targetX) {
            direction = "W";
        } else if (y < targetY) {
            direction = "N";
        } else if (y > targetY) {
            direction = "S";
        }
    }

    // 自動導航至目標點
    public void navigateTo(int targetX, int targetY) {
        while (x != targetX || y != targetY) {
            setDirectionTowards(targetX, targetY);
            moveForward();
        }
        System.out.println("Arrived at target: (" + targetX + ", " + targetY + ")");
    }
}

public class RobotSimulator {
    public static void main(String[] args) {
        Robot robot = new Robot(0, 0, "N"); // 初始位置在 (0, 0),面向北方 (N)
        
        System.out.println("Initial Position: " + robot.getPosition());

        // 設定目標位置
        int targetX = 5;
        int targetY = 3;

        // 讓機器人導航到目標位置
        robot.navigateTo(targetX, targetY);

        System.out.println("Final Position: " + robot.getPosition());
    }
}

程式碼說明:

  1. setDirectionTowards() 方法: 這個方法會根據機器人當前的位置和目標位置,設定機器人面向正確的方向。假如機器人的 x 座標小於目標 x 座標,它會轉向東方 (E),依此類推。

  2. navigateTo() 方法: 這是路徑規劃的核心邏輯。它會持續檢查機器人的位置是否與目標位置相同。如果不同,它會設定正確的方向,然後向前移動一步,直到到達目標位置。

  3. RobotSimulator 類別: 主程式中,機器人會從 (0, 0) 開始,然後導航到目標位置,例如 (5, 3)。

明天也來看看機器人還有什麼其他結合吧~


上一篇
DAY22🤖機器人動作!與Java程式的結合
下一篇
DAY24Joe——Java撰寫職業範例
系列文
從0開始—初階程式語言學習者的必經之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言